#ifndef __UNIONE_LITE_H
#define __UNIONE_LITE_H

#include "types.h"
#include "io.h"
#ifndef false 
#define false 0
#endif

#ifndef true 
#define true 1
#endif
//===========================
// Size Type
//===========================

/*##############################################################################
## CLOCK
##############################################################################*/
#define UART_CLOCK     							12892327UL
#define UART1_CLOCK    							14838339//for 921600 BAUDRATE
#define TMR_CLK	       							12288000UL
#define APB_CLK        							45056000UL
#define DRIVER_VERSION							"unione_lite_V.0.0.2"

/*##############################################################################
## MEMORY MAP
##############################################################################*/
#define ADC_FTADCC010_PA_BASE                   0x40000000
#define EFUSE_PA_BASE                   		0x40100000
#define PWM_FTPWMTMR010_PA_BASE            		0x40200000
#define GPIO_FTGPIO010_PA_BASE                 	0x40300000
#define WDT_FTWDT010_0_PA_BASE            		0x40400000
#define WDT_FTWDT010_1_PA_BASE               	0x40500000
#define IIC_FTIIC010_0_PA_BASE           		0x40600000
#define IIC_FTIIC010_1_PA_BASE                  0x40700000
#define IIC_FTIIC010_2_PA_BASE                  0x40800000
#define UART_FTUART010_0_PA_BASE             	0x40900000
#define UART_FTUART010_1_PA_BASE             	0x40A00000
#define UART_FTUART010_2_PA_BASE             	0x40B00000
#define UART_FTUART010_3_PA_BASE             	0x40C00000
#define TMR_FTTMR010_PA_BASE                    0x40D00000
#define SSP_FTSSP010_0_PA_BASE                  0x40E00000
#define SSP_FTSSP010_1_PA_BASE                  0x40F00000
#define SYSC_PA_BASE                            0x41000000
#define IRC_FTIRC010_PA_BASE                    0x41100000
#define MAILBOX_0_PA_BASE                       0x42400000
#define MAILBOX_1_PA_BASE                       0x42500000
#define PWM_UNIPWM_PA_BASE                      0x42600000
#define PCM_UNIPCM_PA_BASE                      0x42700000

#define SPI_FTSPI020_0_PA_BASE                 	0x30000000
#define SPI_FTSPI020_1_PA_BASE                 	0x30100000
#define SDC_FTSDC021_PA_BASE                    0x50000000
#define DMA_FTDMAC020_0_PA_BASE              	0x50100000
#define DMA_FTDMAC020_1_PA_BASE              	0x50200000
#define INTC_FTINTC020_PA_BASE                  0x50300000
#define AES_FTAES020S_PA_BASE                   0x50400000


/*##############################################################################
## IRQ
##############################################################################*/

#define SCU_FTSCU100_IRQ		       			0
#define SSP_FTSSP010_0_IRQ		       			1
#define SSP_FTSSP010_1_IRQ		       			2
#define IIC_FTIIC010_0_IRQ		       			3
#define IIC_FTIIC010_1_IRQ		       			4
#define IIC_FTIIC010_2_IRQ		       			5
#define SPI_FTSPI020_0_IRQ		      			6
#define SPI_FTSPI020_1_IRQ		      			7
#define SDC_FTSDC021_IRQ		      			8
#define UART_FTUART010_0_IRQ					9
#define UART_FTUART010_1_IRQ					10
#define UART_FTUART010_2_IRQ					11
#define UART_FTUART010_3_IRQ					12
#define TIMER_FTTMR010_0_IRQ           			21
#define TIMER_FTTMR010_1_IRQ           			22
#define TIMER_FTTMR010_2_IRQ            		23
#define TIMER_FTTMR010_ALL_IRQ        			24
#define FTADC_IRQ        						25
#define FTGPIO_IRQ        						26
#define FTWDT010_0_IRQ              			27
#define FTWDT010_1_IRQ              			28
#define MAILBOX_0_IRQ   						60
#define MAILBOX_1_IRQ   						61
#define PLATFORM_IRQ_TOTALCOUNT					64
#define PLATFORM_FIQ_TOTALCOUNT					32


/*##############################################################################
## GPIO - General Purpose I/O
##############################################################################*/



/*##############################################################################
## PWM
##############################################################################*/


/*##############################################################################
## RTC
##############################################################################*/



/*##############################################################################
## System Control Block
##############################################################################*/


/*##############################################################################
## Memory Accelerator Module (MAM)
##############################################################################*/

#define MAM_TIM									(*(REG32 (0xE01FC004)))
#define MAM_CR									(*(REG32 (0xE01FC000)))



#define DIV_ROUND_CLOSEST(x, divisor)(			\
{							\
	typeof(x) __x = x;				\
	typeof(divisor) __d = divisor;			\
	(((typeof(x))-1) > 0 ||				\
	 ((typeof(divisor))-1) > 0 || (__x) > 0) ?	\
		(((__x) + ((__d) / 2)) / (__d)) :	\
		(((__x) - ((__d) / 2)) / (__d));	\
}							\
)

#define UNUSED(_var)   							(void)(_var)

#define __ASSERT(expr) \
    if(!(expr)){ \
        fLib_printf("[%s:%d] ASSERT: (%s)\r\n", __FILE__, __LINE__, #expr);\
        while(1);\
    }
#define ASSERT(expr) __ASSERT(expr)


#define MAX(a, b)    							((a > b) ? a : b)
#define MIN(a, b)    							((a < b) ? a : b)



#endif /* __UNIONE_LITE_H */

